package com.company;

import javax.swing.SwingUtilities;

import java.awt.BorderLayout;

import javax.swing.JPanel;

import javax.swing.JFrame;

import java.awt.Dimension;

import javax.swing.BorderFactory;

import java.awt.Color;

import javax.swing.JButton;

import java.awt.Rectangle;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JLabel;

import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.SwingConstants;

public class ChangePanelExample2 extends JFrame {

    private static final long serialVersionUID = 1L;

    private JPanel jContentPane = null;

    private JPanel jPanel = null;

    private JButton jButton = null;

    private JLabel jLabel = null;

    private Map<Integer, JPanel> panelMap = new HashMap<Integer, JPanel>();

    /**
     *
     * This method initializes jPanel
     *
     *
     *
     * @return javax.swing.JPanel
     *
     */

    private JPanel getJPanel(int num) {

        if (jPanel == null) {

            jPanel = new JPanel();

            jPanel.setLayout(new GridLayout(num, 1));

            jPanel.setPreferredSize(new Dimension(100, 0));

            jPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1));

            for(int i = 0; i < num; i++){
                jPanel.add(getJButton(i), null);
            }

        }

        return jPanel;

    }

    /**
     *
     * This method initializes jButton
     *
     *
     *
     * @return javax.swing.JButton
     *
     */

    private JButton getJButton(int i) {

        jButton = new JButton();

        jButton.setBounds(new Rectangle(5, 11, 83, 27));
        jButton.setPreferredSize(new Dimension(83, 27));

        jButton.setForeground(Color.red);

        jButton.setText("Panel " + i);

        jButton.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent e) {

                jContentPane.remove(((BorderLayout) jContentPane.getLayout()).getLayoutComponent(BorderLayout.CENTER));// 删除内容面板中间原来的组建

                jContentPane.add(getJPanel1(i), BorderLayout.CENTER);// 添加要切换的面板

                jContentPane.validate();// 重构内容面板

                jContentPane.repaint();// 重绘内容面板

                // 上面两句缺一不可，

                // 没有validate()删除和添加没有效果

                // 没有repaint()界面绘出现混乱

            }

        });

        return jButton;

    }



    /**
     *
     * This method initializes jPanel1
     *
     *
     *
     * @return javax.swing.JPanel
     *
     */

    private JPanel getJPanel1(int i) {
        JPanel panel = panelMap.get(i);
        if(panel == null){

            jLabel = new JLabel();

            jLabel.setBounds(new Rectangle(151, 99, 163, 113));

            jLabel.setFont(new Font("Dialog", Font.BOLD, 24));

            jLabel.setHorizontalAlignment(SwingConstants.CENTER);

            jLabel.setForeground(new Color(255, 51, 51));

            jLabel.setText("Panel "+i);

            panel = new JPanel();

            panel.setLayout(null);

            panel.add(jLabel, null);

            panelMap.put(i, panel);
        }

        return panel;

    }


    /**
     *
     * @param args
     *
     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                ChangePanelExample2 thisClass = new ChangePanelExample2();

                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                thisClass.setVisible(true);

            }

        });

    }

    /**
     *
     * This is the default constructor
     *
     */

    public ChangePanelExample2() {

        super();

        initialize();

    }

    /**
     *
     * This method initializes this
     *
     *
     *
     * @return void
     *
     */

    private void initialize() {

        this.setSize(472, 410);

        this.setResizable(false);

        this.setContentPane(getJContentPane());

        this.setTitle("JPanel切换示例");

    }

    /**
     *
     * This method initializes jContentPane
     *
     *
     *
     * @return javax.swing.JPanel
     *
     */

    private JPanel getJContentPane() {

        if (jContentPane == null) {

            jContentPane = new JPanel();

            jContentPane.setLayout(new BorderLayout());

            jContentPane.add(getJPanel1(0), BorderLayout.CENTER);//中间面板

            jContentPane.add(getJPanel(10), BorderLayout.WEST);//左邊面板

        }

        return jContentPane;

    }
}